/*
 * Copyright 2008-2023 dexian.vip. All rights reserved.
 * Support: http://www.dexian.vip
 * License: http://www.dexian.vip/license
 */

package vip.dexian.admin.service;

import vip.dexian.admin.command.AdminRoleUpdateCommand;
import vip.dexian.admin.command.AdminSaveCommand;
import vip.dexian.admin.command.AdminUpdateCommand;
import vip.dexian.admin.command.PasswordUpdateCommand;
import vip.dexian.admin.command.ProfileUpdateCommand;
import vip.dexian.admin.dto.AdminDTO;
import vip.dexian.admin.dto.AdminPrincipal;
import vip.dexian.admin.entity.Admin;
import vip.dexian.core.base.service.BaseService;

/**
 * 管理员业务逻辑操作
 *
 * @author 挺好的 2023年06月05日 08:45:00
 */
public interface AdminService extends BaseService <Admin, AdminDTO, Long> {

    /**
     * 保存管理员信息
     *
     * @param command
     *         保存指令
     *
     * @return {@link vip.dexian.admin.entity.Admin}
     */
    Admin save (AdminSaveCommand command);

    /**
     * 修改管理员信息
     *
     * @param command
     *         修改指令
     */
    Admin update (AdminUpdateCommand command);

    /**
     * 启用或者禁用
     *
     * @param id
     *         管理员id
     */
    void enabledOrDisabled (Long id);

    /**
     * 锁定或者解锁
     *
     * @param id
     *         管理员id
     */
    void lockOrUnlock (Long id);

    /**
     * 修改密码
     *
     * @param id
     *         管理员id
     * @param password
     *         新密码
     */
    void modifyPassword (Long id, String password);

    /**
     * 修改手机号码
     *
     * @param id
     *         管理员id
     * @param mobile
     *         新手机号码
     */
    void modifyMobile (Long id, String mobile);

    /**
     * 修改角色
     *
     * @param command
     *         修改角色command
     */
    void modifyRole (AdminRoleUpdateCommand command);

    /**
     * 修改当前登录账号的密码
     *
     * @param command
     *         修改指令
     */
    void modifyPassword (PasswordUpdateCommand command);

    /**
     * 修改当前登录账号的个人信息
     *
     * @param command
     *         修改指令
     */
    void modifyProfile (ProfileUpdateCommand command);

    /**
     * 获取当前登录的管理员
     *
     * @return {@link AdminPrincipal}
     */
    AdminPrincipal getCurrent ();

    /**
     * 查找当前登录的管理员
     *
     * @return {@link vip.dexian.admin.dto.AdminDTO}
     */
    AdminDTO findCurrent ();

    /**
     * 原密码是否不正确
     *
     * @param oldPassword
     *         原密码
     *
     * @return 原密码是否不正确
     */
    boolean isOldPasswordNonValid (String oldPassword);

    /**
     * 是否已认证
     *
     * @return 是否认证
     */
    boolean isAuthenticated ();

    /**
     * 是否有权限
     *
     * @param name
     *         权限名称
     *
     * @return 1. 权限名称为空 {@link org.apache.commons.lang3.StringUtils#isBlank(CharSequence)}。2.未授权。3.没有权限返回false。否则返回true
     */
    boolean hasPermission (String name);

    /**
     * 用户名是否存在
     *
     * @param username
     *         用户名
     *
     * @return username==null,return true.  返回是否在数据库中存在
     */
    boolean isUsernameExists (String username);

    /**
     * 手机号码是否存在
     *
     * @param mobile
     *         手机号码
     *
     * @return mobile==null,return true.  返回是否在数据库中存在
     */
    boolean isMobileExists (String mobile);
}
